// PROGRAMA : SUBPRINT(ORIGINAL SALVO COM O NOME DE SUBPRINA)
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// SHOPPING DO CIDADAO
// PROGRAMADOR : * DATA: 24/11/1998
// OBJETIVO : SUBROTINA P/ IMPRIMIR A CARTEIRA DE IDENTIDADE
// PARA IMPRESSAO SIMULTANEA DO RG (SUBPRINT) E DO
// BOLETIM (IDCPE090)
// ATUALIZACOES DATA
// PROGRAMA : SUBPRINT 02/03/1999
// PROGRAMADOR :
// OBJETIVO : ATUALIZAR A TABELA DE LINHAS/IMPRESSOARAS/TERMINAIS
// : ATUALIZAR DATAS N6 PARA N8 EM 13/10/1999
// : ATUALIZAR RG N11 PARA N13 EM 13/10/1999
// : INCLUSAO DO POSTO/TREM DA CIDADANIA(P-235)
// EM 16/02/2000
// : INCLUSAO DO SHOPCID DE IMPERATRIZ (P-005)
// EM 18/08/2000
// : ALTERACAO PARA O RACF
// EM 05/12/2001
// : ALTERACAO PARA USO DA PLACA OSA TCP/IP
// EM 26/06/2002
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;

import net.sf.jasperreports.engine.JRException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcte102Report;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcte113Report;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.DidEmissao;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Subprint OBJETIVO : SUBROTINA P/ IMPRIMIR A CARTEIRA DE IDENTIDADE PARA IMPRESSAO SIMULTANEA DO RG (SUBPRINT) E DO BOLETIM (IDCPE090) *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/subprint")
public class Subprint {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	DidEmissao vwEmissao = new DidEmissao();
	// DidCadastro didcad = new DidCadastro();
	// Telas/relatorios utilizados
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	Tablele tablele = new Tablele();
	Idcte113Report report;
	Idcte102Report report2;
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Subprint subprintAnterior;
	String faseproc = "0";
	// Par�metros
	private long[] regger = new long[3];
	private long[] ndemid = new long[3];
	private String[] numvia = new String[3];
	private int matr = 0;
	private int vr = 0;
	private long[] rgemite = new long[3];
	private long[] docemite = new long[3];
	private String[] viaemite = new String[3];
	private String ctl = "";
	private int j = 0;
	private int i = 0;
	private int k = 0;
	private String conf = "";
	private int datemi = 0;
	private String chassi = "";
	private String nommae = "";
	private String nompai = "";
	private String comuna = "";
	private int data8 = 0;
	private String[] numpos = new String[3];
	// private String[] pis = new String[3];
	// private long[] pispas = new long[3];
	// private String[] numcpf = new String[3];
	// private String[] docum1 = new String[3];
	// private String[] docum2 = new String[3];
	// private int[] datn = new int[3];
	// private int[] datnas = new int[3];
	// private String[] comun = new String[3];
	private String[] nvia = new String[3];
	private String[] ufnasc = new String[3];
	private String vvv = "";
	private int v1 = 0;
	private String ppp = "";
	private String docume = "";
	private String nomide = "";
	private String nomid1 = "";
	private String nomid2 = "";
	private String filia1 = "";
	private String filia2 = "";
	private String nomeClasse = this.getClass().getSimpleName();
	private String impressora = "";
	private String jUsuario = UtilBean.getInitUser();
	private long[] numrg = new long[3];
	private long[] nserie = new long[3];
	private String[] nomeid = new String[3];
	private int horatemp = 0;
	// PROGRAMA: GETCHR
	// FUNCAO: CAPTURA O NOME LOGICO DO TERMINAL
	private String ppg = "";
	private String pparm = "";
	private int rTid = 0;
	private int len = 0;
	private int retcode = 0;
	private String getarea = "";
	private String devi = "";
	private String devic = "";
	private String video3 = "";
	private int video5 = 0;
	// 1 TABTERM (A08/58) INIT
	// <'TVCPG001','TVCPG002','TVCPG003','TVCPG004',
	// 'TVCPG005','TVCMV111','TVCMV112','TVCMV131',
	// 'TVCMV051','TVCMV052','TVCMV061','TVCMV062',
	// 'TVCMV071','TVCMV072','TVCMV081','TVCMV082',
	// 'TVCMV091','TVCMV092','TVCMV101','TVCMV102',
	// 'TVCMV111','TVCMV112','TVCMV121','TVCMV122',
	// 'TVCMV131','TVCMV132','TVCMV141','TVCMV142',
	// 'TVCMV151','TVCMV152','TVCMV161','TVCMV162',
	// 'TVCCL001','TVCCL002','TVCCL003','TVCJP004',
	// 'TVCJP001','TVCJP002','TVCJP003','TVCJP005',
	// 'TVCMV132','TSTI0003','TVCMV152','TVCIPZ01',
	// 'TVCIPZ02','TVCIPZ03','TVCIPZ04','TVCIPZ05',
	// 'TVCMV011','TVCMV012','TVCMV021','TVCMV022',
	// 'TVCMV031','TVCMV032','TVCMV041','TVCMV042',
	private int it = 0;
	// 'TGRPH009','TGRPH010'>
	private String wc = "";
	private String s1 = "";

	public Subprint(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(long[] pregger, long[] pndemid, String[] pnumvia, int pmatr, int pvr) throws Exception {
		int i1 = 0;
		regger = pregger;
		ndemid = ndemid;
		numvia = pnumvia;
		matr = pmatr;
		vr = pvr;

		for (i1 = 1; i1 <= 2; i1++) {
			report.setPis(i1, "");
			report.setPispas(i1, 0);
			report.setNumcpf(i1, "");
			report.setDocum1(i1, "");
			report.setDocum2(i1, "");
			report.setComun(i1, "");
			report.setDatn(i1, 0);
			report.setDatnas(i1, 0);
		}
		Arrays.fill(rgemite, 0);
		Arrays.fill(docemite, 0);
		Arrays.fill(viaemite, 0);
		Arrays.fill(numpos, "");
		Arrays.fill(numvia, "");
		Arrays.fill(regger, 0);
		Arrays.fill(ndemid, 0);
		Arrays.fill(nvia, 0);
		Arrays.fill(ufnasc, "");
		Arrays.fill(numrg, 0);
		Arrays.fill(nserie, 0);
		Arrays.fill(nomeid, "");
		sessao.getSisgsisp().setOperacao("ECI");
		nomeClasse = "SUBPRINT";
		regger = rgemite;
		ndemid = docemite;
		nvia = viaemite;
		sessao.getSisgsisp().setMatric(matr);
		sessao.getSisgsisp().setVar(vr);
		estla001.cpo = 5;
		estla001.esttip = 99;
		i = 0;
		conf = "S";
		data8 = UtilBean.obtemDataCorrente();
		nomid1 = "";
		nomid2 = "";
		nommae = "";
		nompai = "";
		filia1 = "";
		filia2 = "";
		ctl = "";
		for (i1 = 1; i1 <= 2; i1++) {
			report.setDatnas(i1, 0);
			report.setDatn(i1, 0);
			report.setComun(i1, "");
			report.setDocum1(i1, "");
			report.setDocum2(i1, "");
			report.setNumvia(i1, "");
			report.setNumpos(i1, "");
		}
		estla001.qde = 0;
		i = 0;

		sessao.getSisgsisp().setMens("CONFIRME O NUMERO DE VIA");
		ctl = "S";

		for (i = 1; i <= 2; i++) {
			if (regger[i] == 0) {
				imprime();
				break;
			}
			while (vwDvecon.pesquisaNumeroDocumentoTipoDocumentoIn(ndemid[i], 87, 88)) {
				if (vwDvecon.getTipoDocumento() == 87) {
					System.out.println("DOCUMENTO CANCELADO EMISSAO NAO PERMITIDA");
				}
				// REINPUT 'DOCUMENTO CANCELADO EMISSAO NAO PERMITIDA'
				// MARK *REGGER(I) ALARM
				if (vwDvecon.getTipoDocumento() == 88 && Long.parseLong(UtilBean.subStr(chassi, 0, 13)) != regger[i]) {
					UtilBean.mensagemTexto("DOCUMENTO EMITIDO COM RG:1:" + vwDvecon.getNumeroChassi());
				}
				// REINPUT 'DOCUMENTO EMITIDO COM RG:1:', DIACNT-CHASSI
				// MARK *REGGER(I) ALARM
				chassi = vwDvecon.getNumeroChassi();

			}
			nserie = ndemid;
			chassi = "";
			acha();
		}

		funcoes.estna001(estla001.cpo, estla001.esttip, estla001.qde, sessao.getSisgsisp().getVar(), sessao.getSisgsisp().getMatric());
		// dao.rollback();
		// exit();
	}

	private void acha() throws Exception {
		vwDidcad.consultaNumeroRg(regger[i]);
		nomide = vwDidcad.getNomeIdent();
		nompai = vwDidcad.getNomePai();
		nommae = vwDidcad.getNomeMae();
		numrg[i] = regger[i];
		nserie[i] = vwDidcad.getNumeroSerieCart();
		nomeid[i] = vwDidcad.getNomeIdent();
		ppp = UtilBean.moveSubstring(ppp, 0, 3, "N", vwDidcad.getNumeroPosto());
		vvv = UtilBean.moveSubstring(vvv, 0, 2, "N", nvia[i]);
		report.setDatn(i, vwDidcad.getDataDocumento());
		report.setDatn(i, (int) funcoes.sissd002(report.getDatn(i)));
		// IF DINIDE-NUMVIA GT 0
		// IF DIAIDE-POLDIR = 'Y" || DIAIDE-INDDIR = 'Y" ||
		// DIAIDE-MEDDIR = 'Y" ||
		// DIAIDE-ANUDIR = 'Y" ||
		// DIAIDE-MINDIR = 'Y" ||
		// DIAIDE-POLESQ = 'Y" ||
		// DIAIDE-INDESQ = 'Y" ||
		// DIAIDE-MEDESQ = 'Y" ||
		// DIAIDE-ANUESQ = 'Y" ||
		// DIAIDE-MINESQ = 'Y'
		// PERFORM ROT-DATEMI
		// IF DATA8 GT (DATEMI + 600)
		// REINPUT 'EMISSAO NAO PERMITIDA P/DATILOSCOPIA VENCIDA'
		// ALARM
		// END-IF
		// END-IF
		numvia[i] = UtilBean.concatena("VIA-", vvv);
		// END-IF
		numpos[i] = UtilBean.concatena("P-", ppp);
		if (nommae.trim().equals("")) {

			nommae = "************";
		}
		if (nompai.trim().equals("")) {

			nompai = "************";
		}
		if (vwDidcad.getNacionalidadeIdent() == 1) {
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 1);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "A", vwDidcad.getNomeMunicipioIdent());
			// TABELA DE MUNICIPIOS
			// NOME DO MUNICIPIO
			tablele.resp = funcoes.sisst001(1, vwDidcad.getNomeMunicipioIdent(), tablele.resp);
			comuna = tablele.resp;
			if (UtilBean.subStr(tablele.resp, 0, 1).equals("#")) {
				tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 209);
				tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
				// TABELA DE PAISES
				// PAIS DE ORIGEM
				tablele.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), tablele.resp);
				comuna = tablele.resp;
			}

			report.setComun(i, comuna);
			report.setComun(i, UtilBean.concatena(comuna, "-", vwDidcad.getUfMunicipioNasc()));
		} else {
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 209);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			tablele.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), tablele.resp);
			comuna = tablele.resp;

			report.setComun(i, comuna);
		}
		switch (vwDidcad.getTipoDocumento()) {
		case 1: {
			if (vwDidcad.getEstadoCivil() == 7) {
				docume = UtilBean.concatena("NASC.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			} else {
				docume = UtilBean.concatena("NASC.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			}
			break;
		}
		case 2: {
			if (vwDidcad.getEstadoCivil() == 4) {
				docume = UtilBean.concatena("CASAM-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			} else {
				docume = UtilBean.concatena("CASAM.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			}
			break;
		}
		case 3: {
			docume = UtilBean.concatena("PORT.MINISTERIAL-N:", vwDidcad.getNumeroPortariaMinist(), "/", vwDidcad.getAnoPortariaMinist());
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 209);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			tablele.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), tablele.resp);
			// PESQUISA TABELA

			comuna = tablele.resp;
			break;
		}
		case 4: {

			docume = UtilBean.moveSubstring(docume, 0, 35, "A", "NAC. PORTUGUESA-PORT. MINISTERIAL");
			docume = UtilBean.moveSubstring(docume, 35, 20, "A", UtilBean.concatena("N.", vwDidcad.getNumeroPortariaMinist(), "/", vwDidcad.getAnoPortariaMinist()));
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 209);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
			tablele.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), tablele.resp);
			// PESQUISA TABELA

			comuna = tablele.resp;
			break;
		}
		case 5: {
			if (vwDidcad.getEstadoCivil() == 5) {
				docume = UtilBean.concatena("SEP.JUD.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			}
			break;
		}
		case 6: {
			if (vwDidcad.getEstadoCivil() == 3) {
				docume = UtilBean.concatena("SEP.DIV.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			}
			break;
		}
		case 7: {
			if (vwDidcad.getEstadoCivil() == 6) {
				docume = UtilBean.concatena("SEP.DES.-N:", vwDidcad.getNumeroCertidao(), " FLS.", vwDidcad.getNumeroFolha(), " LIV.", vwDidcad.getNumeroLivro());
			}
			break;
		}
		default: {
			break;
		}
		}

		report.setDocum1(i, UtilBean.subStr(docume, 0, 35));
		report.setDocum2(i, UtilBean.subStr(docume, 35, 20));
		docume = "";
		for (j = 1; j <= 37; j++) {
			if (UtilBean.subStr(nomide, 0 + j - 1, 1).trim().equals("")) {
				if (UtilBean.subStr(nomide, 0 + j + 1 - 1, 1).trim().equals("")) {
					break;
				}
			}
		}
		switch (i) {
		case 1: {
			filia1 = String.format("%35s%35s%35s", nompai, "E", nommae);
			if (j < 36) {
				nomid1 = UtilBean.moveSubstring(nomid1, 35, 35, "A", nomide);
			} else {
				nomid1 = nomide;
			}
			break;
		}
		case 2: {
			filia2 = String.format("%35s%35s%35s", nompai, "E", nommae);
			if (j < 36) {
				nomid2 = UtilBean.moveSubstring(nomid2, 35, 35, "A", nomide);
			} else {

				nomid2 = nomide;
			}
			break;
		}
		default: {
			break;
		}
		}
		report.setF1(UtilBean.subStr(filia1, 0, 35));
		report.setF2(UtilBean.subStr(filia1, 35, 35));
		report.setF3(UtilBean.subStr(filia1, 70, 35));

		report.setF4(UtilBean.subStr(filia2, 0, 35));
		report.setF5(UtilBean.subStr(filia2, 35, 35));
		report.setF6(UtilBean.subStr(filia2, 70, 35));

		report.setNom1(UtilBean.subStr(nomid1, 0, 35));
		report.setNom2(UtilBean.subStr(nomid1, 35, 35));

		report.setNom3(UtilBean.subStr(nomid2, 0, 35));
		report.setNom4(UtilBean.subStr(nomid2, 35, 35));

		nomide = "";
		nompai = "";
		nommae = "";
		report.setDatnas(i, vwDidcad.getDataNasc());
		report.setDatnas(i, (int) funcoes.sissd002(report.getDatnas(i)));
		if (vwDidcad.getRegistroAnterior() > 0 && vwDidcad.getUfRegAnterior() == sessao.getSisgsisp().getUfloca()) {
			report.setPis(i, "RG. ANT.");
			report.setPispas(i, vwDidcad.getRegistroAnterior());
		} else {
			if (vwDidcad.getNumeroPisPasep() > 0) {

				report.setPispas(i, vwDidcad.getNumeroPisPasep());
				report.setPis(i, "PIS/PASEP");
			} else {
				report.setPispas(i, 0);
				report.setPis(i, "");
			}
		}
		if (vwDidcad.getNumeroCpf() > 0) {
			report.setNumcpf(i, UtilBean.moveSubstring("", 0, 11, "N", vwDidcad.getNumeroCpf()));
		} else {
			report.setNumcpf(i, StringUtils.repeat("*", 11));
		}
		if (report.getNumcpf(i).equals("0")) {
			report.setNumcpf(i, StringUtils.repeat("*", 11));
		}

		vwDidcad.setNumeroVia(Integer.parseInt(UtilBean.subStr(vvv, 0, 2)));
		chassi = UtilBean.moveSubstring("", 0, 13, "N", regger[i]);
		vwDidcad.atualiza();
		// dao.commit();
		vwDvecon.setNumeroChassi(chassi);
		vwDvecon.setNumeroDocumento(ndemid[i]);
		vwDvecon.setDataEmissao(data8);
		// NUMERO DOCUMEN

		vwDvecon.setTipoDocumento(88);
		vwDvecon.setMatriculaFunc(sessao.getSisgsisp().getMatric());
		vwDvecon.setCodigoMunicipio(Integer.parseInt(UtilBean.subStr(ppp, 0, 3)));
		vwDvecon.setCodigoRecuperacao(v1);
		// NUMERO POSTO
		// NUMERO DA VIA
		// MOVE RENAID TO VW-DVECON.DINCNT-RENAID CONTROLE ABN
		vwDvecon.grava();
		// dao.commit();
		estla001.qde = i;
		if (i == 2) {
			imprime();
		}
		for (k = 1; k <= 2; k++) {
			vwEmissao.setRegGeralEmitido(numrg[k]);
			vwEmissao.setNomeIdent(nomeid[k]);
			vwEmissao.setNumeroSerieRg(nserie[k]);
			vwEmissao.setDataEmissao(UtilBean.obtemDataCorrente());
			horatemp = Integer.parseInt((new SimpleDateFormat("HHmmss").format(Calendar.getInstance().getTime())));
			vwEmissao.setHoraEmissaoCarteira(horatemp);
			vwEmissao.setMatriculaFunc(sessao.getSisgsisp().getMatric());
			vwEmissao.grava();
			// dao.commit();
		}

	}

	private void imprime() throws JRException, ParseException, FileNotFoundException {
		sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");
		report = new Idcte113Report();
		report2 = new Idcte102Report();
		// DEFINE PRINTER(EFM = 2)
		// RELATORIO
		// MP = 1;

		// ALTERACAO PARA POSICIONAMENTO DO BOLETIM NA IMPRESSORA APOS A PLACA
		// OSA
		wc = "";
		it = 0;
		len = 148;
		retcode = funcoes.getchr(getarea, len, rTid);

		// UtilBean.subStr(s1,0, 3) = 889;
		// UtilBean.subStr(s1,3, 14) = UtilBean.subStr(getarea,56, 8);
		// TAB. DE ENDERECO DE TERMINAL
		// ENDERECO DO TERMINAL
		while (vwDvetab.pesquisaTabcha(889, UtilBean.subStr(getarea, 56, 8))) {
			// 679
			report.gravaRelatorio(1);
			// RELATORIO
			wc = "S";

		}
		if (!wc.equals("S")) {
			report2.gravaRelatorio(1);
			// RELATORIO
		}
		// CLOSE PRINTER(1)
		// CLOSE PRINTER(2)
		for (int i1 = 1; i1 <= 2; i1++) {
			regger[i1] = 0;
		}
		nomid1 = "";
		nomid2 = "";
		filia1 = "";
		filia2 = "";
		for (int i1 = 1; i1 <= 2; i1++) {
			report.setPis(i1, "");
			report.setPispas(i1, 0);
			report.setNumcpf(i1, "");
			report.setDatn(i1, 0);
			report.setDatnas(i1, 0);
			report.setComun(i1, "");
			report.setDocum1(i1, "");
			report.setDocum2(i1, "");
			report.setNumpos(i1, "");
			report.setNumvia(i1, "");
		}
		wc = "";
		it = 0;
		report.imprimir();
	}

	private void rotDatemi() {

		chassi = String.valueOf(regger[i]);
		while (vwDvecon.pesquisaNumeroChassi(chassi)) {

			datemi = vwDvecon.getDataEmissao();

		}

		// SISCERRO}}} //UtilBean.mensagemTexto("!  ERROR NUMERO:" *ERROR-NR
		// "    LINHA:" *ERROR-LINE " PROGRAMA:" nomeClasse "!");
	}
}
